package cc.linker.steplink.crm.merchant.dao;

import cc.linker.steplink.crm.merchant.pojo.menu.GroupPo;
import cc.linker.steplink.crm.merchant.pojo.menu.PublicMenuPo;
import cc.linker.steplink.crm.merchant.pojo.menu.TagCustomerPo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface PublicMenuDao {
    void addMenu(Map<String, Object> da);

    void saveMenu(Map<String, Object> da);

    Map<String, Object> getMenu(Map<String, Object> da);

    /**
     * @Description：添加个性化菜单
     * @DateTime：2020/8/24 15:46
     * @Params：
     * @Return：
     */
    Integer insertIndividualityMenu(@Param("model") PublicMenuPo model);

    /**
    * @Description：判断该菜单标题是否已存在
    * @DateTime：2020/9/3 14:33
    * @Params：
    * @Return：
    */
    Integer isExitIndividualityMenu(@Param("orgId")String orgId,@Param("title")String title,@Param("id") Long id);

    /**
     * @Description：修改标签的状态
     * @DateTime：2020/8/26 13:57
     * @Params：
     * @Return：
     */
    Integer updateMenuStatus(@Param("status") Integer status, @Param("wxMenuId") String wxMenuId);

    /**
     * @Description：编辑菜单栏
     * @DateTime：2020/8/25 15:43
     * @Params：
     * @Return：
     */
    Integer updateIndividualityMenu(@Param("model") PublicMenuPo model);

    /**
     * @Description：获取当前最大的排序值
     * @DateTime：2020/8/26 13:06
     * @Params：
     * @Return：
     */
    Integer getMaxSort(@Param("orgId") String orgId);

    /**
     * @Description：编辑内容的对应微信菜单ID
     * @DateTime：2020/8/26 19:50
     * @Params：
     * @Return：
     */
    Integer updateContentWXMenuId(@Param("ids") List<Integer> ids, @Param("wxMenuId") String wxMenuId);

    /**
     * @Description：通过机构ID获取个性化菜单列表
     * @DateTime：2020/8/24 15:58
     * @Params：
     * @Return：
     */
    List<PublicMenuPo> getIndividualityMenuList(@Param("orgId") String orgId);

    void saveDefaultMenu(Map<String, Object> da);

    /**
     * @Description：获取分组列表
     * @DateTime：2020/8/24 16:45
     * @Params：
     * @Return：
     */
    List<GroupPo> getGroupListByGroupIds(@Param("groupIds") String[] groupIds);

    /**
     * @Description：删除个性化菜单
     * @DateTime：2020/8/25 11:07
     * @Params：
     * @Return：
     */
    void deleteMenu(@Param("id") Long id);

    /**
     * @Description：获取菜单栏信息
     * @DateTime：2020/8/25 15:02
     * @Params：
     * @Return：
     */
    PublicMenuPo getMenuModel(@Param("id") Long id);


    /**
     * @Description：删除标签下所有的用户
     * @DateTime：2020/8/25 16:19
     * @Params：
     * @Return：
     */
    Integer deleteTagCustomerByTagId(@Param("wxTagId") String wxTagId);

    void delAllMenu(String orgId);

    void delMenuContent(@Param("wxMenuId") String wxMenuId, @Param("orgId") String orgId);

    void addMenuContent(Map<String, Object> content);

    Map<String, Object> getMenuContent(String id);

    /**
     * @Description：获取机构下的所有个性化菜单
     * @DateTime：2020/8/26 21:34
     * @Params：
     * @Return：
     */
    List<PublicMenuPo> getIndividualityList(@Param("orgId") String orgId);

    /**
     * @Description：通过分组ID获取分组下的所有用户
     * @DateTime：2020/8/26 22:00
     * @Params：
     * @Return：
     */
    List<TagCustomerPo> getCustomerListByGroupId(
            @Param("pageIndex") Integer pageIndex,
            @Param("pageSize") Integer pageSize,
            @Param("groupId") String groupId,
            @Param("groupIds") List<String> groupIds);

    /**
     * @Description：老数据迁移到表
     * @DateTime：2020/8/27 8:36
     * @Params：
     * @Return：
     */
    Integer inesrtCustomerTagOldData(@Param("wxTagIds")List<String> wxTagIds);

    /**
     * @Description：删除老的临时数据
     * @DateTime：2020/8/27 8:37
     * @Params：
     * @Return：
     */
    Integer removeOldCustomerTag();

    /**
    * @Description：删除用户的标签
    * @DateTime：2020/9/4 9:46
    * @Params：
    * @Return：
    */
    Integer removeCustomerTag(@Param("wxTagIds")List<String> wxTagIds);

    /**
    * @Description：删除取消关注的用户
    * @DateTime：2020/9/5 14:28
    * @Params：
    * @Return：
    */
    Integer removeCancelAttentionCustomer(@Param("wxOpenId") String wxOpenId);

    /**
     * @Description：添加用户关联微信标签记录
     * @DateTime：2020/8/25 16:10
     * @Params：
     * @Return：
     */
    Integer saveTagCustomerList(@Param("customerList") List<TagCustomerPo> customerList);

    Integer getDefaultPublicMenuCount();
    /**
     * @Description：通过微信标签获取这个标签下所有需要更改的人
     * @DateTime：2020/8/27 10:41
     * @Params：
     * @Return：
     */
    List<TagCustomerPo> getCustomerListByWxTagId(
            @Param("pageIndex") Integer pageIndex,
            @Param("pageSize") Integer pageSize,
            @Param("wxTagId") String wxTagId);

    List<TagCustomerPo> getCustomerListByRemoveTag(@Param("pageIndex") Integer pageIndex,
                                                   @Param("pageSize") Integer pageSize,
                                                   @Param("wxTagId") String wxTagId);

    /**
     * @Description：获取分群在个性化菜单里是否存在
     * @DateTime：2020/8/27 13:53
     * @Params：
     * @Return：
     */
    Integer getGroupIsExit(@Param("groupIds") List<String> groupIds, @Param("orgId") String orgId);

    /**
    * @Description：修改顺序
    * @DateTime：2020/8/27 15:01
    * @Params：
    * @Return：
    */
    Integer updateMenuSort(@Param("id") Long id, @Param("sort") Integer sort, @Param("changeSort") Integer changeSort,@Param("moveType") Integer moveType);

    Map<String, Object> getMenuContentByValue(String value);

    String getPublicVerify(String orgId);

    Map<String, Object> getPublicInfo(String orgId);

    List<String> getPublicMenuTokens();
}
